/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package nexus.adec;
import control.UserBean;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import javax.faces.context.FacesContext;
import javax.faces.el.VariableResolver;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JOptionPane;
import nexus.criterios.CriterioEvaluacion;
import nexus.criterios.GestorCriteriosDB;

/**
 *
 * @author juampi
 */
public class FiltroGrupos {
    private ArrayList<FiltroCarrera> carreras;
    private String codigoEspacio;
    private String[] seleccionados;
    public FiltroGrupos() {
        seleccionados=new String[0];
        codigoEspacio = getUserBean().getCodigoCurso();
        carreras = new ArrayList<FiltroCarrera>();
        ArrayList<Carrera> cs = GestorEspacioDB.getInstance().listarCarrerasEspacio(getUserBean().getCodigoCurso());
        for (Carrera carrera : cs) {
            FiltroCarrera itemC = new FiltroCarrera(carrera.getNombreCarrera(), carrera.getCodigoCarrera(),getUserBean().getId(),getUserBean().getCodigoCurso());
            carreras.add(itemC);
        }
    }
    public void selectionChanged(ValueChangeEvent evt)
    {
        seleccionados = (String[]) evt.getNewValue();
    }
    public String[] getSeleccionados(){return seleccionados;}
    public void setSeleccionados(String[] data){seleccionados=data;}
      public ArrayList<SelectItem> getCriterios(){
            ArrayList<SelectItem> items=new ArrayList<SelectItem>();
            ArrayList<CriterioEvaluacion> cs=GestorCriteriosDB.getInstance().listarCriteriosEspacio(getUsuario().getCodigoCurso());
            for(CriterioEvaluacion c : cs){
                items.add(new SelectItem(c.getCodigoCriterio(),c.getNombreCriterio()));
            }
            return items;
        }

    /**
     * @return the carreras
     */
    public ArrayList<FiltroCarrera> getCarreras() {
        if(!codigoEspacio.equalsIgnoreCase(getUserBean().getCodigoCurso())){
            carreras = new ArrayList<FiltroCarrera>();
            ArrayList<Carrera> cs = GestorEspacioDB.getInstance().listarCarrerasEspacio(getUserBean().getCodigoCurso());
            for (Carrera carrera : cs) {
                FiltroCarrera itemC = new FiltroCarrera(carrera.getNombreCarrera(), carrera.getCodigoCarrera(),getUserBean().getId(),getUserBean().getCodigoCurso());
                carreras.add(itemC);
            }
            seleccionados=new String[0];
        }
        return carreras;
    }

    /**
     * @param carreras the carreras to set
     */
    public void setCarreras(ArrayList<FiltroCarrera> carreras) {
        this.carreras = carreras;
    }
    public UserBean getUserBean() {
        FacesContext context = FacesContext.getCurrentInstance();
        VariableResolver vr = context.getApplication().getVariableResolver();
        UserBean ub =(UserBean) vr.resolveVariable(context, "userBean");
        return ub;
    }
    public void actionGuardarFiltro(ActionEvent event) {
        ArrayList<GrupoAcademico> grupos = new ArrayList<GrupoAcademico>();
        ArrayList<FiltroCarrera> carreras = getCarreras();
        for (FiltroCarrera itemCarrera : carreras) {
            for (FiltroMateria itemMateria : itemCarrera.getMaterias()) {
                for (FiltroGrupo itemGrupo : itemMateria.getGrupos()) {
                    if(itemGrupo.isSeleccionado()) {
                        GrupoAcademico g = new GrupoAcademico(itemCarrera.getCodigoCarrera(), itemMateria.getCodigoMateria(), itemGrupo.getNombreGrupo());
                        grupos.add(g);
                    }
                }
            }
        }
        ArrayList<String> criterio=new ArrayList<String>();
        for(String c : seleccionados){
            criterio.add(c);
        }
        InputStream res=GestorCriteriosDB.getInstance().recuperarCalificaciones(getUsuario().getCodigoCurso(), grupos, criterio);
        if(res!=null){
            descargar(res);
        }else{
            //JOptionPane.showMessageDialog(null,"error");
        }
    }
    public void descargar(InputStream fis){
         try{
            FacesContext ctx = FacesContext.getCurrentInstance();

            byte[] bytes = new byte[1000];
            int read = 0;

            if (!ctx.getResponseComplete()) {
               String fileName = "nexus-reporte.xls";
               String contentType = "application/vnd.ms-excel";
               //String contentType = "application/pdf";
               HttpServletResponse response =(HttpServletResponse) ctx.getExternalContext().getResponse();
               response.setContentType(contentType);
               response.setHeader("Content-Disposition","attachment;filename=\"" + fileName + "\"");
               ServletOutputStream out;

                out = response.getOutputStream();

                while ((read = fis.read(bytes)) != -1) {
                    out.write(bytes, 0, read);
                }

               out.flush();
               out.close();
               System.out.println("\nDescargado\n");
               ctx.responseComplete();
            }
            } catch (Exception ex) {

            }
    }

    /**
     * @return the codigoEspacio
     */
    public String getCodigoEspacio() {
        return codigoEspacio;
    }

    /**
     * @param codigoEspacio the codigoEspacio to set
     */
    public void setCodigoEspacio(String codigoEspacio) {
        this.codigoEspacio = codigoEspacio;
    }
      public UserBean getUsuario(){
        FacesContext facesContext = FacesContext.getCurrentInstance();
        VariableResolver vr = facesContext.getApplication().getVariableResolver();
        UserBean user = (UserBean)vr.resolveVariable(facesContext, "userBean");
        return user;
    }
}
